#include<stdio.h>
#include<stdlib.h>

#define N 10

void show_element(const int *p, int n);
int del_element(int **p, int *n, int key);
static int find_elem(const int *p, const int n, int key);
int add_element_sort(int **p, int *n, int key);
int * alloc(int n);
int main(int argc, char *argv)
{	
	int n = N;
	int *arr = NULL;
	int elem;
	int del_elem;
	arr = alloc(n);

	for(int i = 0; i < n; i++){
		arr[i] = 2 * i + 1;
		printf("%d ", arr[i]);
	}
	printf("\n");

	printf("请输入要插入的元素：");
	scanf("%d", &elem);
	add_element_sort(&arr, &n, elem);
	show_element(arr, n);

	printf("请输入要删除的元素：");
	scanf("%d", &del_elem);
	del_element(&arr, &n, del_elem);
	show_element(arr, n);
	//int index = find_elem(arr, n, 5);
	//printf("%d", index);

	free(arr);
	arr = NULL;

	
	return 0;
}

int * alloc(int n){
	int *p = (int *)malloc(n * sizeof(int));
	return p;
	
}

int add_element_sort(int **p, int *n, int key){
	int i = *n;
	(*n)++;
	*p = (int *)realloc(*p, *n * sizeof(int));

	for(; i >= 0; i--){
		if(*(*p+i-1) < key){
			break;
		}else{
			*(*p+i) = *(*p+i-1);
		}
	}
	*(*p+i) = key;

	return 0;
}

int del_element(int **p, int *n, int key){
	int index = find_elem(*p, *n, key);
	if(index == -1) return -1;
	for(int i = index; i < *n - 1; i++){
		*(*p+i) = *(*p + i + 1);
	}
	(*n)--;
	*p =(int *) realloc(*p, *n * sizeof(int));
	return 0;
}

static int find_elem(const int *p, const int n, int key){
	int i;
	for(i = n-1; i >= 0; i--){
		if(*(p+i) == key ){
			return i;
		}
	}
	return i;
}

void show_element(const int *p, int n){
	for(int i = 0; i < n; i++){
		printf("%d ", *(p+i));
	}
	printf("\n");
	return;
}



